package pe.com.bbva.modpre.dominio;

import javax.persistence.*;
import javax.validation.constraints.NotNull;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;

import pe.com.bbva.modpre.dominio.util.AuditoriaBean;
import pe.com.bbva.modpre.utileria.Constante;

/**
 * The persistent class for the ORG_EQUIPO database table.
 * 
 */
@Entity
@Table(name="ORG_EQUIPO")
@SuppressWarnings("serial")
public class Equipo extends AuditoriaBean {

	@Id
	@Column(unique=true, nullable=false, precision=16)
	@GeneratedValue(strategy = GenerationType.TABLE, generator = "SEQ_EQUIPO")
	@TableGenerator(name = "SEQ_EQUIPO", table = "SEQ_ENTIDAD", pkColumnName = "ENTIDAD", initialValue = 1,
	valueColumnName = "ULTIMO_ID", pkColumnValue = "pe.com.bbva.modpre.dominio.Equipo", allocationSize = 1)
	private Long id;

	@Column(nullable=false, length=20)
	@NotNull(message=Constante.CODIGO_MENSAJE.VALIDAR_TEXTBOX)
	private String codigo;

	@Column(nullable=false, length=50)
	@NotNull(message=Constante.CODIGO_MENSAJE.VALIDAR_TEXTBOX)
	private String nombre;

	//uni-directional many-to-one association to Valor
	@ManyToOne
	@JoinColumn(name="CONFIGURACION", nullable=false)
	@NotNull(message=Constante.CODIGO_MENSAJE.VALIDAR_COMBOBOX)
	private Valor configuracion;
	
	@Column(name="ANS_COLABORADOR")
	private Boolean ansColaborador;
	
	@Column(name="ATENDER_COLABORADOR")
	private Boolean atenderColaborador;
	
	@Column(name="REGISTRAR_AVAL")
	private Boolean registrarAval;
	
	//uni-directional many-to-one association to Valor
	@ManyToOne
	@JoinColumn(name="ESTADO", nullable=false)
	@NotNull(message=Constante.CODIGO_MENSAJE.VALIDAR_COMBOBOX)
	private Valor estado;

	//uni-directional many-to-one association to Equipo
	@ManyToOne
	@JoinColumn(name="PADRE")
	private Equipo padre;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public Valor getConfiguracion() {
		return configuracion;
	}

	public void setConfiguracion(Valor configuracion) {
		this.configuracion = configuracion;
	}

	public Boolean getAnsColaborador() {
		return ansColaborador;
	}

	public void setAnsColaborador(Boolean ansColaborador) {
		this.ansColaborador = ansColaborador;
	}

	public Boolean getAtenderColaborador() {
		return atenderColaborador;
	}

	public void setAtenderColaborador(Boolean atenderColaborador) {
		this.atenderColaborador = atenderColaborador;
	}

	public Boolean getRegistrarAval() {
		return registrarAval;
	}

	public void setRegistrarAval(Boolean registrarAval) {
		this.registrarAval = registrarAval;
	}

	public Valor getEstado() {
		return estado;
	}

	public void setEstado(Valor estado) {
		this.estado = estado;
	}

	public Equipo getPadre() {
		return padre;
	}

	public void setPadre(Equipo padre) {
		this.padre = padre;
	}

	@Override
	public int hashCode() {
		HashCodeBuilder hashCodeBuilder = new HashCodeBuilder(3, 7);
		hashCodeBuilder.append(codigo);
		return hashCodeBuilder.toHashCode();
	}

	@Override
	public boolean equals(Object obj) {
		boolean equals = false;
		if (obj instanceof Equipo) {
			Equipo bean = (Equipo) obj;
			EqualsBuilder equalsBuilder = new EqualsBuilder();
			equalsBuilder.append(codigo, bean.codigo);
			equals = equalsBuilder.isEquals();
		}
		return equals;
	}

	public final static String KEY_PADRE = "padre";
	
	public static abstract class CODIGO
	{
		public final static String GER_ARE = "GER_ARE";
		public final static String RES_PRE_MIN = "RES_PRE_MIN";
		public final static String RES_PRE_BEC = "RES_PRE_BEC";
		public final static String ANA_PRE_MIN = "ANA_PRE_MIN";
		public final static String ANA_PRE_BEC = "ANA_PRE_BEC";
		public final static String GER_TER = "GER_TER";
		public final static String GER_REG = "GER_REG";
		public final static String GER_OFI_TER = "GER_OFI_TER";
		public final static String GER_OFI_REG = "GER_OFI_REG";
		public final static String EJE_MIN = "EJE_MIN";
		public final static String EJE_BEC = "EJE_BEC";
	}
	
}